package com.software.task.service.impl;


import com.software.task.mapper.CategoryMapper;
import com.software.task.mapper.TaskMapper;
import com.software.task.pojo.Task;
import com.software.task.service.TaskService;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @author 李嘉
 * @since 2024/12/16 13:50
 * @version 1.0
 */
@Service
public class TaskServiceImpl implements TaskService {

    private final TaskMapper taskMapper;

    private final CategoryMapper categoryMapper;

    public TaskServiceImpl(TaskMapper taskMapper, CategoryMapper categoryMapper) {
        this.taskMapper = taskMapper;
        this.categoryMapper = categoryMapper;
    }

    /**
     * 根据任务ID获取任务
     *
     * @param taskid 任务ID
     * @return 任务对象
     */
    @Override
    public Task getTaskById(Integer taskid) {
        return taskMapper.findTaskById(taskid);
    }

    /**
     * 根据任务名称获取任务列表
     *
     * @param name 任务名称
     * @return 任务列表
     */
    @Override
    public List<Task> getTasksByName(String name) {
        return taskMapper.findTasksByName(name);
    }

    /**
     * 根据教师ID获取任务列表
     *
     * @param teacherId 教师ID
     * @return 任务列表
     */
    @Override
    public List<Task> getTasksByTeacherId(Integer teacherId) {
        return taskMapper.findTasksByTeacherId(teacherId);
    }

    /**
     * 创建任务
     *
     * @param task 任务对象
     */
    @Override
    public void createTask(Task task) {
        // 确保传入的task对象不为null
        if (task == null) {
            throw new IllegalArgumentException("任务对象不能为空");
        }
        task.setCreateDat(LocalDateTime.now());
        task.setUpdateDat(LocalDateTime.now());
        // 不需要设置taskid，数据库将自动生成
        taskMapper.createTask(task);
    }

    /**
     * 根据任务ID删除任务
     *
     * @param id 任务ID
     */
    @Override
    public void deleteTaskById(Integer id) {
        if (id == null) {
            throw new IllegalArgumentException("ID不能为空");
        }
        taskMapper.deleteTaskById(id);
    }

    /**
     * 根据任务ID更新任务详情
     *
     * @param id 任务ID
     */
    @Override
    public void updateTaskById(Integer id, Task taskDetails) {
        if (id == null || taskDetails == null) {
            throw new IllegalArgumentException("ID或任务详情不能为空");
        }
        taskDetails.setUpdateDat(LocalDateTime.now());
        // 调用Mapper方法更新任务
        taskMapper.updateTaskById(
                taskDetails.getTaskName(),
                taskDetails.getTaskDescription(),
                taskDetails.getTeacherId(),
                taskDetails.getDueDate(),
                taskDetails.getUpdateDat(),
                id
        );
    }

    /**
     * 获取所有任务
     *
     * @return 任务列表
     */
    @Override
    public List<Task> findAllTasks() {
        return taskMapper.findAllTasks();
    }

    /**
     * 根据学生ID获取任务列表
     *
     * @param studentId 学生ID
     * @return 任务列表
     */
    @Override
    public List<Task> getTasksByStudentId(Integer studentId) {
        // 1. 从 category 表中查找 create_user = studentId 的 task_id 列表
        List<Integer> taskIds = categoryMapper.getTaskIdsByStudentId(studentId);
        // 2. 根据 task_id 列表查询 task 表
        return taskMapper.getTasksByTaskIds(taskIds);
    }
}